我是VBA的新手,我已经编写了一些代码,尽管它可以正常工作,但我认为它很庞大,如果需要进行更改,效果不是很好。
代码打开电子表格,运行一个函数(称为“ LastRow”)以复制数据,并运行另一个函数(称为“ NxtRow”)以将其粘贴到带有宏的电子表格的下一个空行中,然后关闭数据已复制并移至下一个。基本上是将多张纸串联在一起。
我认为必须有一种方法来编写代码,以一次调用函数,然后循环遍历列表中的每个工作表。这可能吗?
我的代码是:
NxtRow()函数
<Dropdown
data={this.state.data}
label='Select'
selectedItemColor='#2872c0'
fontSize={15}
valueExtractor={({ displayName }) => displayName}
itemPadding={10}
onChangeText={() => console.log(this.onChangeText)}
/>
LstRow()函数
Public Function NxtRow()
Dim BlankRow As Long
Windows("GA_BudgetTool_MASTER.xlsm").Activate
BlankRow = Range("A" & Rows.Count).End(xlUp).Row + 1
Cells(BlankRow, 1).Select
ActiveSheet.Paste
BlankRow = Range("A" & Rows.Count).End(xlUp).Row + 1
Cells(BlankRow, 1).Select
End Function
VBA Sub()
Public Function LastRow()
Dim LstRow As Long, LstCol As Long, Rng As Range, A3 As Range
LstRow = Range("A" & Rows.Count).End(xlUp).Row
LstCol = Range("O" & LstRow).Column
Set Rng = Range(Cells(LstRow, 1), Cells(LstRow, LstCol))
Set A3 = Range("A3")
Range(A3, Rng).Select
Selection.Copy
End Function
以这种方式进行约30张纸。有没有更简单的方法可以编写此代码,并在以后需要时更轻松地进行修改?
答案 0 :(得分:1)
我只需要对文件名进行一些排列,然后使用for循环将函数调用重复多次即可
Sub ImpData()
'Deactivate Screen Updating and Display Alerts
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Dim filenames As Variant
filenames = Array("file1", "file2")
For i = 1 To UBound(filenames) + 1
Workbooks.Open Filename:=filenames(i - 1)
LastRow
NxtRow
Windows("Worksheet" & i & ".xlsx").Activate
ActiveWindow.Close
Next i
'Reactivate Screen Updating and Display Alerts
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub