天道酬勤,学无止境

vba

如何知道在 vba (excel) 中填写的最后一行? [复制](how to know the last row filled in vba (excel)? [duplicate])

问题 这个问题在这里已经有了答案: 返回从 A1 到真正上次使用的单元格的范围(4 个回答) 6年前关闭。 我有一张名为“Recap”的工作表,我想知道这张工作表中有多少行。我尝试使用以下代码: Function FindingLastRow(Mysheet As String) As Long Dim sht As Worksheet Dim LastRow As Long Set sht = ThisWorkbook.Worksheets(Mysheet) LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row FindingLastRow = LastRow End Function ...... 在我的宏中,我试过这个: .... Dim lastR As Long lastR=FindingLastRow("Recap") msgBox lastR ..... 回答1 您将一个字符串传递到您的FindingLastRow函数中,但没有使用它。 shiit是传入的参数,但您稍后尝试使用名为Mysheet 的东西。 Function FindingLastRow(Optional MySheet As String, Optional sCOL as String = "A") As Long Dim sht As

2021-09-20 03:16:11    分类:技术分享    vba   excel

如何使用 VBA 根据条件删除 Excel ListObject 中的行?(How to delete rows in an Excel ListObject based on criteria using VBA?)

问题 我在 Excel 中有一个名为tblFruits的表,有 10 列,我想删除Fruit列包含Apple任何行。 我怎样才能做到这一点? 回答1 以下子作品: Private Sub deleteTableRowsBasedOnCriteria(tbl As ListObject, columnName As String, criteria As String) Dim x As Long, lastrow As Long, lr As ListRow lastrow = tbl.ListRows.Count For x = lastrow To 1 Step -1 Set lr = tbl.ListRows(x) If Intersect(lr.Range, tbl.ListColumns(columnName).Range).Value = criteria Then 'lr.Range.Select lr.Delete End If Next x End Sub sub 可以这样执行: Dim tbl As ListObject Set tbl = ThisWorkbook.Worksheets("Sheet1").ListObjects("tblFruits") Call deleteTableRowsBasedOnCriteria(tbl, "Fruit",

2021-09-20 00:44:23    分类:技术分享    excel   vba

默认范围属性产生意外结果(Default Range property produces unexpected results)

问题 作为我在此处发布的答案的后续问题,我想知道为什么以下内容不会出错,这是 VBA 中的可能错误吗? 取以下数据: 如果我们使用下面的VBA代码,我们会收到一个错误,因为我们需要使用日期的数值来匹配: '//Produces error Debug.Print WorksheetFunction.Match(Range("C3").Value, Range("A1:A14"), 0) 所以这些语句中的任何一个都可以工作: '// Cast to Long Debug.Print WorksheetFunction.Match(CLng(Range("C3").Value), Range("A1:A14"), 0) '// Access .Value2 property directly Debug.Print WorksheetFunction.Match(Range("C3").Value2, Range("A1:A14"), 0) 然而正如 Jean-François Corbett 所指出的,如果我们不指定一个属性,它也可以工作: Debug.Print WorksheetFunction.Match(Range("C3"), Range("A1:A14"), 0) 因此,如果.Value不起作用,并且这是Range对象的默认属性 - 为什么它在上面的示例中起作用?

2021-09-19 23:11:49    分类:技术分享    vba   excel   worksheet-function

Excel,遍历 XLSM 文件并将行复制到另一个工作表(Excel, loop through XLSM files and copy row to another sheet)

问题 我现在使用此代码遇到的主要问题是处理我打开的 xlsm 文件的错误。 我对这些文件的 VB 代码没有编辑权限。 如果 vb 出错,有没有办法跳过文件? 我有一个包含大约 99 个 xlsm 文件的文件夹,我希望遍历每个文件并复制让我们说每个工作簿中的第 14 行并将其粘贴到单独的工作簿中作为摘要。 这是我到目前为止所拥有的; 唯一的问题是它复制了一个空白行。 当我逐步浏览 VB 时,我可以看到它没有在它打开的 xlsm 文件上运行宏。 有人知道一些可以帮助我的代码吗? Sub MergeAllWorkbooks() Dim SummarySheet As Worksheet Dim FolderPath As String Dim NRow As Long Dim FileName As String Dim WorkBk As Workbook Dim SourceRange As Range Dim DestRange As Range Application.Calculation = xlCalculationAutomatic ' Create a new workbook and set a variable to the first sheet. Set SummarySheet = Workbooks.Add(xlWBATWorksheet)

2021-09-19 22:41:48    分类:技术分享    vba   excel

将 VBA 中执行的 Shell 命令的输出传送到特定 Shell(Piping the output of a Shell Command executed in VBA to a Specific Shell)

问题 我对 VBA 还是很陌生,几天前就开始学习了。 现在我正在尝试创建一个宏来执行 shell 命令并将输出通过管道传输到特定工作表中的特定单元格。 我想要完成的是将目录结构的文本转储到工作表中。 下面是我到目前为止的代码。 Sub CopyList() Call Shell("cmd.exe /S /K" & "dir /s /b directoryPath", vbNormalFocus) End Sub 执行此宏会显示命令提示符并将目录结构转储到 cmd 窗口中。 我想知道如何将它传输到工作表。 您的帮助将不胜感激。 回答1 您可以创建 WScript.Shell 对象并直接读取 StdOut: Sub SO() Range("A1").Value = CreateObject("WScript.Shell").Exec("CMD /S /C dir /s /b directoryPath").StdOut.ReadAll End Sub 回答2 一种方法是将Call Shell修改为: Call Shell("cmd.exe /S /K" & "dir /s /b directoryPath >C:\MyData\dir.txt", vbNormalFocus) 这将在文件夹“C:\MyData”(替换为您选择的文件夹)中创建一个文本文件,其中包含将进入控制台的内容。

2021-09-19 22:09:14    分类:技术分享    vba   shell   excel

从 Excel VBA 编写然后调用 C++ DLL(Writing and then Calling a C++ DLL from Excel VBA)

问题 我正在使用 Visual Studio 2010 在 C++ 中编写一个 32 位 DLL,我打算从 Excel VBA 调用它。 C++ cpp 文件包含以下内容: #include "windows.h" #include "stdafx.h" int _stdcall fnGetData (const LPCSTR someText) { MessageBoxA(0, someText, "wizzle wuzzle", MB_OK | MB_ICONINFORMATION); return 42; } 虽然 DEF 文件有这个: LIBRARY getpdata EXPORTS GetData=fnGetData excel VBA 是这样的: Option Explicit Private Declare Function GetData Lib "getpdata.dll" (ByRef someText As String) As Integer Public Sub PassSomeText() Dim ret As Integer, someText As String someText = "Hello from my Excel Subroutine." ret = GetData(someText) End Sub 代码编译良好,并生成一个 DLL。

2021-09-19 21:52:21    分类:技术分享    c++   vba

通过Windows登录用户ID自动过滤数据的VBA代码?(VBA code to Filter data automatically by windows log-in user ID?)

问题 我得到了运行 sql server 存储过程的 VBA 代码,将数据导入 excel。 例如:Excel 数据: Id Division Department Scale 1 North IT 8.5 2 South Finance 8.0 3 North Finance 8.0 4 West IT 8.5 5 East Finance 8.0 6 South IT 8.5 现在我遇到的情况是: 如果North一位用户运行 VBA 宏,则 excel 结果应仅显示Division North。 如果来自South用户运行 VBA 宏,则 excel 结果应仅显示Division South。 EX:如果来自South一位用户运行 VBA 宏,结果如下 Id Division Department Scale 2 South Finance 8.0 6 South IT 8.5 如何按Division设置用户以过滤 VBA 中的数据。 我的用户数量有限,主要是 4-6 个用户。 通过在 VBA 中添加一些代码,有没有办法使用他们的 Windows 凭据来过滤 excel 中的数据? 有什么帮助吗? 回答1 由于您的用户数量很少,您可以直接在 VBA 项目中对其进行硬编码。 为此,我将使用 Dictionary 对象。 字典是一种将数据存储在键值对中的方法。

2021-09-19 21:16:52    分类:技术分享    vba   excel

vba 检查工作表是否存在 - 对象需要错误(vba check if sheet exists - object required error)

问题 我正在处理这段代码,当用户在目标范围内输入值时,程序将检查工作表名称是否存在,并做出相应的反应。 我有以下代码,第二部分(Cell C17)工作正常,但第一部分(Cell C3)中的这一行If Not Sheet Is Nothing Then抛出一个 object required 错误。 我在调试模式下查看代码,发现sheet的值为空,而sheet1的值为空。 两部分的逻辑完全相同,所以我很困惑为什么第一个单元格不起作用。 有谁能帮我指点一下吗? 谢谢。 Private Sub Worksheet_Change(ByVal Target As Range) Dim rp, rp1 As String Dim Sheet, Sheet1 As Worksheet rp = ThisWorkbook.Sheets("Settings and Instruction").Range("C3").Value rp1 = ThisWorkbook.Sheets("Settings and Instruction").Range("C17").Value On Error Resume Next Set Sheet1 = Worksheets(rp1) On Error GoTo 0 On Error Resume Next Set Sheet = Worksheets(rp) On

2021-09-19 21:07:15    分类:技术分享    excel   vba

MS Office 2013 - VBA 密码安全 [重复](MS Office 2013 - VBA password security [duplicate])

问题 这个问题在这里已经有了答案: 有没有办法破解 Excel VBA 项目的密码? (23 个回答) 6年前关闭。 我想知道 MS Office 2013 上的 VBA 密码有多安全。 我在网上搜索过,有很多网站销售软件可以做到这一点,可靠吗? 我想围绕我的办公文件开发一些安全性,这取决于内部的 VBA 代码,但是如果可以轻松更改/查看内部的 VBA 代码,那么这样做是没有意义的。 谢谢 回答1 使用此答案作为参考:有没有办法破解 Excel VBA 项目上的密码? 而不是做所有的十六进制东西。 你可以试试这个。 它适用于任何文件(*.xls、*.xlsm、*.xlam ...)。 已在 Excel 2007、Excel 2010 和 Excel 2013 - 32 位版本上测试并运行。 打开包含锁定的 VBA 项目的文件创建一个新的 xlsm 文件并将此代码存储在Module1 中Option Explicit Private Const PAGE_EXECUTE_READWRITE = &H40 Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As Long, Source As Long, ByVal Length As Long) Private

2021-09-19 21:02:04    分类:技术分享    vba   excel   ms-word   ms-office

MS Office 2013 - VBA 密码安全 [重复](MS Office 2013 - VBA password security [duplicate])

问题 这个问题在这里已经有了答案: 有没有办法破解 Excel VBA 项目的密码? (23 个回答) 6年前关闭。 我想知道 MS Office 2013 上的 VBA 密码有多安全。 我在网上搜索过,有很多网站销售软件可以做到这一点,可靠吗? 我想围绕我的办公文件开发一些安全性,这取决于内部的 VBA 代码,但是如果可以轻松更改/查看内部的 VBA 代码,那么这样做是没有意义的。 谢谢 回答1 使用此答案作为参考:有没有办法破解 Excel VBA 项目上的密码? 而不是做所有的十六进制东西。 你可以试试这个。 它适用于任何文件(*.xls、*.xlsm、*.xlam ...)。 已在 Excel 2007、Excel 2010 和 Excel 2013 - 32 位版本上测试并运行。 打开包含锁定的 VBA 项目的文件创建一个新的 xlsm 文件并将此代码存储在Module1 中Option Explicit Private Const PAGE_EXECUTE_READWRITE = &H40 Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As Long, Source As Long, ByVal Length As Long) Private

2021-09-19 21:00:04    分类:技术分享    vba   excel   ms-word   ms-office