excel - Excel VBA 将某些数据向下复制 x 行数
问题描述
我是 VBA 的新手,通常我只会求助于 excel 公式。我正在编写一个记录数据库,该数据库从用户选择的 Excel 表中提取信息。我在网上找到了我拼凑起来的代码:-
Sub Get_Data_From_File()
Dim FileToOpen As Variant
Dim OpenBook As Workbook
Application.ScreenUpdating = False
FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", Filefilter:="Excel Files (*.xls*),*xls*")
If FileToOpen <> False Then
Set OpenBook = Application.Workbooks.Open(FileToOpen, Password:="uraduct")
Application.DisplayAlerts = False
OpenBook.Sheets(1).Range("B3:B11").Copy
ThisWorkbook.Worksheets("Data").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues, Transpose:=True
Application.DisplayAlerts = False
OpenBook.Sheets(1).Range("B19:U162").Copy
ThisWorkbook.Worksheets("Data").Cells(Rows.Count, 10).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues, Transpose:=True
OpenBook.Close False
End If
Application.ScreenUpdating = True
On Error Resume Next
Columns("K").SpecialCells(xlBlanks).EntireRow.Delete
End Sub
基本上,B3:B11 是一个标题,我希望它出现在 B19:U162 上的每一行上,它是 1 列或 20 列转换为行(基于最后的删除)。
此外,在某些情况下,用户没有填写第 19 行/第 19 列,因此如果第 20 行/第 20 行已填写,我想为第 19 行添加一个默认值,以防止它在下一次文件上传时被覆盖。
我希望这是有道理的。
谢谢,
解决方案
测试单元格(“B19”),如果为空,则计算第 20 行的列数,然后填写该行。关闭源工作簿而不保存更改。
Application.DisplayAlerts = False
Dim cols As Integer
If OpenBook.Sheets(1).Range("B19") = "" Then
cols = OpenBook.Sheets(1).Cells(20, Columns.Count).End(xlToLeft).Column - 1
OpenBook.Sheets(1).Range("B19").Resize(1, cols).Value = "empty"
End If
OpenBook.Sheets(1).Range("B19:U162").Copy
推荐阅读
- vba - VBA查找包含特定日期的相关文件,代码第一次工作但重新运行时找不到具有相同日期的新文件
- string - 在 Haskell 中遍历字符串/文本时使用状态
- php - 函数 file_exists 总是返回 false
- angular - 在应用程序运行时将新的“observables”推送到“observables”列表,并使用 combineLatest - Angular 监听更改
- python - 我如何编写一个不和谐的机器人,以便它能够使用 python PIL 发布修改后的 gif 和/或 png 个人资料图片?
- c++ - C++20 通用 Lambda
- python - 如何使用 PyQtGraph 绘制图像上两点之间的水平距离
- jsp - 浏览器参数FilterConfig?=null
- regex - 在字符串中搜索多对字母(Ruby)
- flutter - If 语句更改 QuerySnapshot Flutter 中的图标颜色