EXCEL VBA这些语句是什么意思,有大神逐句翻译吗? excel vba 有多少语句,分别是什么意思?

\u5e2e\u5fd9\u9010\u53e5\u7ffb\u8bd1\u8fd9\u6bb5Excel VBA\u4ee3\u7801\u7684\u8be6\u7ec6\u610f\u601d

Sub CombineFiles() //\u5efa\u7acb\u65b9\u6cd5
Dim path As String //\u5b9a\u4e49String(\u5b57\u7b26\u4e32)\u578b\u53d8\u91cfpath
Dim FileName As String //\u5b9a\u4e49String\u578b\u53d8\u91cfpath
Dim LastCell As Range //\u5b9a\u4e49Range (\u5355\u5143\u683c)\u578b\u53d8\u91cfpath
Dim Wkb As Workbook //\u5b9a\u4e49Workbook(excle) String\u578b\u53d8\u91cfpath
Dim WS As Worksheet //\u5b9a\u4e49Worksheet (\u5de5\u4f5c\u8868)String\u578b\u53d8\u91cfpath
Dim ThisWB As String //\u5b9a\u4e49String\u578b\u53d8\u91cfpath

Dim MyDir As String //\u5b9a\u4e49String\u578b\u53d8\u91cfMyDir
MyDir = ThisWorkbook.path & "\" //MyDir = \u73b0\u5728\u7684\u6587\u4ef6\u8def\u5f84+"\"
'ChDriveLeft(MyDir, 1) 'find all the excel files//\u88ab\u6ce8\u91ca\u6389\u4e86
'ChDir MyDir//\u88ab\u6ce8\u91ca\u6389\u4e86
'Match =Dir$("")//\u88ab\u6ce8\u91ca\u6389\u4e86

ThisWB = ThisWorkbook.Name //ThisWB = \u73b0\u5728\u6253\u5f00\u7684\u6587\u4ef6\u7684\u540d\u5b57(\u6211\u8bb0\u5f97\u6587\u4ef6\u540d\u662fcaption,\u8fd9\u4e2a\u5e94\u8be5\u4e5f\u662f\u6587\u4ef6\u540d\u5427)
Application.EnableEvents = False //\u8fd9\u4e2a\u662f\u7981\u7528\u89e6\u53d1\u4e8b\u4ef6(\u9632\u6b62\u91cd\u590d\u89e6\u53d1)
Application.ScreenUpdating = False//\u7981\u7528\u5c4f\u5e55\u5237\u65b0
path = MyDir //\u7b80\u5355\u7684\u8d4b\u503c\u8bed\u53e5
FileName = Dir(path & "\*.xls", vbNormal)//\u7b80\u5355\u7684\u8d4b\u503c\u8bed\u53e5\(\u8c03\u7528\u4e86Dir\u65b9\u6cd5 ,\u4e3aFileName \u8d4b\u503c)
Do Until FileName = "" //\u5faa\u73af\u76f4\u5230FileName \u4e3a\u7a7a
If FileName ThisWB Then //\u5982\u679cFileName \u4e0d\u7b49\u4e8eThisWB \u90a3\u4e48
Set Wkb = Workbooks.Open(FileName:=path & "\" & FileName) //\u6253\u5f00\u4e00\u4e2a\u6587\u4ef6(\u6587\u4ef6\u8def\u5f84 path & "\" & FileName) \u5e76\u628a\u8fd9\u4e2a\u6587\u4ef6\u8bb0\u5f55\u5230 wkb\u53d8\u91cf
For Each WS In Wkb.Worksheets //\u5faa\u73af\u6240\u6709sheet\u9875
Set LastCell = WS.Cells.SpecialCells(xlCellTypeLastCell) //\u53d6\u5f97\u6700\u540e\u4e00\u4e2a\u5355\u5143\u683c
If LastCell.Value = "" And LastCell.Address = Range("$A$1").Address Then //\u5982\u679c\u6ca1\u6709\u503c\u5e76\u4e14\u5730\u5740\u5728(\u7b2c\u4e00\u4f4d???\u8fd9\u4e2a\u4e0d\u592a\u786e\u5b9a)
Else
WS.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) //\u590d\u5236sheet\u9875
End If
Next WS
Wkb.Close False //\u5173\u95ed\u6587\u4ef6
End If
FileName = Dir() //\u8c03\u7528dir()\u65b9\u6cd5
Loop //\u5faa\u73af
Application.EnableEvents = True//\u6253\u5f00\u4e8b\u4ef6\u89e6\u53d1
Application.ScreenUpdating = True//\u6253\u5f00\u9875\u9762\u5237\u65b0

Set Wkb = Nothing//\u6e05\u7a7a
Set LastCell = Nothing//\u6e05\u7a7a
End Sub

VBA\u4e0eVB\u4e00\u6837\uff0cVisual Basic \u8bed\u53e5(75\u6761)

AppActivate\u8bed\u53e5
Beep\u8bed\u53e5
Call\u8bed\u53e5
ChDir\u8bed\u53e5
ChDrive\u8bed\u53e5
Close\u8bed\u53e5
Const\u8bed\u53e5
Date\u8bed\u53e5
Declare\u8bed\u53e5
Deftype\u8bed\u53e5
DeleteSetting\u8bed\u53e5
Dim\u8bed\u53e5
Do...Loop\u8bed\u53e5
End\u8bed\u53e5
Enum\u8bed\u53e5
Erase\u8bed\u53e5
Error\u8bed\u53e5
Event\u8bed\u53e5
Exit\u8bed\u53e5
FileCopy\u8bed\u53e5
ForEach...Next\u8bed\u53e5
For...Next\u8bed\u53e5
Function\u8bed\u53e5
Get\u8bed\u53e5
GoSub...Return\u8bed\u53e5
GoTo\u8bed\u53e5
If...Then...Else\u8bed\u53e5
Implements\u8bed\u53e5
Input#\u8bed\u53e5
Kill\u8bed\u53e5
Let\u8bed\u53e5
LineInput#\u8bed\u53e5
Lock\uff0cUnlock\u8bed\u53e5
LSet\u8bed\u53e5
Mid\u8bed\u53e5
MkDir\u8bed\u53e5
Name\u8bed\u53e5
OnError\u8bed\u53e5
On...GoSub\u3001On...GoTo\u8bed\u53e5
Open\u8bed\u53e5
OptionBase\u8bed\u53e5
OptionCompare\u8bed\u53e5
OptionExplicit\u8bed\u53e5
OptionPrivate\u8bed\u53e5
Print#\u8bed\u53e5
Private\u8bed\u53e5
PropertyGet\u8bed\u53e5
PropertyLet\u8bed\u53e5
PropertySet\u8bed\u53e5
Public\u8bed\u53e5
Put\u8bed\u53e5
RaiseEvent\u8bed\u53e5
Randomize\u8bed\u53e5
ReDim\u8bed\u53e5
Rem\u8bed\u53e5
Reset\u8bed\u53e5
Resume\u8bed\u53e5
RmDir\u8bed\u53e5
RSet\u8bed\u53e5
SaveSetting\u8bed\u53e5
Seek\u8bed\u53e5
SelectCase\u8bed\u53e5
SendKeys\u8bed\u53e5
Set\u8bed\u53e5
SetAttr\u8bed\u53e5
Static\u8bed\u53e5
Stop\u8bed\u53e5
Sub\u8bed\u53e5
Time\u8bed\u53e5
Type\u8bed\u53e5
While...Wend\u8bed\u53e5
Width#\u8bed\u53e5
With\u8bed\u53e5
Write#\u8bed\u53e5

Private Sub Worksheet_Activate() '工作表激活事件
Set d = CreateObject("Scripting.Dictionary") '赋值D为字典对象
arr = Sheet1.UsedRange
For i = 2 To UBound(arr)
If arr(i, 1) <> "" Then d(arr(i, 1)) = "" 'D增加关键字
Next
With Range("B2").Validation
.Delete
.Add 3, 1, 1, Join(d.keys, ",") 'B2增加数据有效性等于D关键字相连的值
End With
Set d = Nothing
End Sub
Sub 查询()
Dim d, arr, brr(), ar, br(), abr(), m, n, i, j, a, b, aa, s
Range("A5:P10000").ClearContents '清除("A5:P10000")单元格区域内容
If Range("B2") = "" Then MsgBox "请选择【料号】!程序退出。", 64, "温馨提示": Exit Sub
If Range("C2") = "" Then MsgBox "请填写出库数量!程序退出。", 64, "温馨提示": Exit Sub '单元格B2和C2单元格为空值时弹出对话框提示
arr = Sheet1.UsedRange '赋值ARR
For i = 2 To UBound(arr) '在ARR1维中循环
If arr(i, 1) = Range("B2") And arr(i, 4) = "Available" Then '判定单元格是否等于 Range("B2") 和arr(i, 4) = "Available"就执行下面的代码
m = m + 1 'M值进行累加
ReDim Preserve brr(1 To 7, 1 To m) '给BRR数给赋值,
For j = 1 To 6 'J从一到6循环
brr(j, m) = arr(i, j) '给BRR赋值等于对应的arr数组理面的值
Next
brr(7, m) = arr(i, 10) '同样是是BRR赋值
End If
If arr(i, 1) = Range("B2") Then '判定arr(i, 1) = Range("B2")就执行下面代码
s = s + 1 'S值进行累加
ReDim Preserve abr(1 To 7, 1 To s) 'M 同样也是给abr赋值等于对应的arr数组理面的值
For j = 1 To 6
abr(j, s) = arr(i, j)
Next
abr(7, s) = arr(i, 10)
End If
Next
If m = 0 Then '判断M等于0就执行下面的程序
Range("B5:H10000").ClearContents '清除(("B5:H10000")单元格区域内容
[B5].Resize(s, 7) = Application.Transpose(abr) '{B5]扩充区域后赋值等于abr转置的值
Range("B5:H" & s + 4).Sort [H5] '对H列排序
MsgBox "【" & Range("B2") & "】料号可出库的库存是【0】!程序退出。", 64, "温馨提示" '弹出提示
Exit Sub '退出程序
End If
[B5].Resize(m, 7) = Application.Transpose(brr) ' '{B5]扩充区域后赋值等于BRR转置的值
Range("B5:H" & m + 4).Sort [H5] '对H列排序
arr = Range("B5:H" & m + 4) '重新赋值ARR
Range("B5:H10000").ClearContents '清除(("B5:H10000")单元格区域内容
[B5].Resize(s, 7) = Application.Transpose(abr) ' '{B5]扩充区域后赋值等于abr转置的值
Range("B5:H" & s + 4).Sort [H5] '对H列排序
For i = 1 To UBound(arr) '在ARR数组中循环
a = a + arr(i, 3) '给A赋值
Next
b = Val(Range("C2")) '给B赋值
If a - b < 0 Then '判定A-B小于0就执行下面程序
MsgBox "【" & Range("B2") & "】料号现有库存 " & a & " 不够本次出库!程序退出。", 64, "温馨提示" '弹出提示
Exit Sub
End If
For i = 1 To UBound(arr)
n = n + 1
ReDim Preserve br(1 To 7, 1 To n)
For j = 1 To 7
br(j, n) = arr(i, j)
Next
aa = aa + arr(i, 3)
If Val(aa) >= Val(b) Then
Exit For
End If
Next
br(3, n) = br(3, n) - (aa - b)
[J5].Resize(n, 7) = Application.Transpose(br) '上述代码就是给[J5].Resize(n, 7)这个区域赋值等于转置后的(br) 内容
End Sub

这么多,逐句解释,有点强人所难呀,并且一点奖励都没有。

原文件看看,PMC的同行,你要改啥》[email protected]
ReDim Preserve brr(1 To 7, 1 To m)这句应该会报错

字典
数组

扩展阅读:vba编程必背50个程序 ... 初学vba编程100个代码 ... vba编程入门教程 ... excel vba有必要学吗 ... 一般人学vba要多久 ... excel vba编程教程完整版 ... 表格vba编程怎样使用 ... excel vba 多条件查询 ... excel vba实例详解 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网