Excel VBA:Replace()输出用作范围变量
我会尽力解释这一点。希望我的脚本笔记能澄清我的胡言乱语。 简言之,完成后,此脚本将翻转历史生产表,将这些表中的选定数据编译为一个。在当前代码中,在标识下一个要粘贴到的空单元格时,我很难让Replace()输出正常工作。当我开始浏览WorkBooks部分时,我试图限制所需的代码更改量。我希望这是有道理的。“复制粘贴需要代码以有限的更改复制过去。我的想法是只需更改目标列。”我的技能有限,但我正在学习,因此请随时就方法或设计提供建议和反馈。目前,我在尝试调试columnCEL变量在范围选择中的工作方式时遇到了困难。我很感激有人能给我任何有建设性的东西。链接,信息来源等等,我已经在这个网站上冲浪了好几个小时,我知道了一些事情,但是Excel VBA:Replace()输出用作范围变量,excel,debugging,vba,variables,replace,Excel,Debugging,Vba,Variables,Replace,我会尽力解释这一点。希望我的脚本笔记能澄清我的胡言乱语。 简言之,完成后,此脚本将翻转历史生产表,将这些表中的选定数据编译为一个。在当前代码中,在标识下一个要粘贴到的空单元格时,我很难让Replace()输出正常工作。当我开始浏览WorkBooks部分时,我试图限制所需的代码更改量。我希望这是有道理的。“复制粘贴需要代码以有限的更改复制过去。我的想法是只需更改目标列。”我的技能有限,但我正在学习,因此请随时就方法或设计提供建议和反馈。目前,我在尝试调试columnCEL变量在范围选择中的工作方式
Sub parse()
Dim strPath As String
Dim columnCEL As String
Dim lastrow As Range
'open WB to consolidate too
Workbooks.Open "c:\prodplan\compiled\plancon.xlsx"
Set lastrow = ActiveSheet.UsedRange.End(xlDown).Offset(1, 0)
Set objexcel = CreateObject("Excel.Application")
objexcel.Visible = True
objexcel.DisplayAlerts = False
strPath = "C:\prodplan"
Set objfso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objfso.GetFolder(strPath)
'Loop through objWorkBooks
For Each objfile In objFolder.Files
If objfso.GetExtensionName(objfile.Path) = "xlsx" Then
Set objworkbook = objexcel.Workbooks.Open(objfile.Path)
objworkbook.Worksheets("plan").Select
'start header dates and shifts copy from objworkbook to consolidated WB
objworkbook.Worksheets("plan").Range("b6:p7").Select
Selection.copy
Workbooks("plancon.xlsx").Worksheets("data").Range("B1").Select
lastrow.Select
ActiveCell.PasteSpecial
'start loop for objworkbook name copy to field in plancon corisponding with date/shift and copy/past select row data.
objworkbook.Close False
'Move proccesed folder to new Dir
End If
'remove msgbox after debug
MsgBox "loop stoper remove for final application"
Next
objexcel.Quit
End Sub
"destination WB "Plancon table structure
Date shift day Total sales Inventory Travel
source WB NAME Thurs Night 3429
source WB NAME Fri Day 2735
source WB NAME Fri Night 5294
source WB NAME Sat Day 7672
source WB NAME Sat Night 0
Source structure
Shift: Thurs Fri Fri
Shift: Night Day Night
Date: 40360 40361 40361
Total sales 3429 2735 5294
Inventory 1750.5045 1685.854 3374.3956
Travel
蒂姆,安迪,谢谢你抽出时间。你们都是对的,它应该是偏移量(1,0)。
Tim关于打开目标工作手册时的活动单元格,我已将其设置为“a1”,但由于代码将在粘贴到指定列之前将最后一个单元格设置为活动,因此不需要设置为“a1”,每次粘贴都将对其进行硬编码。我试图找到一种方法,在每次输入新列进行粘贴时,不必更改结束行的名称。我相信安迪的建议会使事情简单化。
在搜索其他代码以获得示例和理解时,我没有看到usedrange"我已更新守则,以反映有关建议。我还添加了源表和目标表的示例。源表包含大约78行标签,这些标签将以示例格式复制到目标WB。在一个完美的世界里,全选转置粘贴会让我达到目的。不幸的是,有太多的垃圾和过滤它手动87+WB是没有吸引力的。我必须循环使用比较等于复制范围。或搜索等于源中每行的复制范围。关于什么更快/更高效,有什么建议吗?不管怎样,谢谢你的帮助/作为一个传声筒 做了更多的调查。。在一个微软开发者的网站上找到了这个,但在搜索排名中还远远没有排名靠前。不管怎样,结果都是这样
Dim MyColumn As String
Dim Here As String
Here = ActiveCell.Address
MyColumn = Mid(Here, InStr(Here, "$") + 1, InStr(2, Here, "$") - 2)
lastrow = ActiveWorkbook.ActiveSheet.Range(MyColumn & "65536").End(xlUp).Offset(1, 0)
打开目标工作簿时,如何知道哪个单元格将处于活动状态?它总是同一列吗?如果是,那么您最好只硬编码。
Set lastrow=Cells(ActiveCell.Column,Rows.Count)。End(xlUp)。Offset(-1,0)
您真的是说-1表示偏移量,还是应该是1?FWIWSet lastrow
指令不会对我产生错误,但您可以简化处理方法。去掉columnCEL
,直接转到:set lastrow=activesheet.usedrange.end(xldown).offset(1,0)
(我假设您的意思是偏移+1,而不是@TimWilliams建议的-1)