excel - 使用变体数组更新单元格
问题描述
在以下代码子集中,我试图通过在范围内每个单元格的开头添加撇号来让 Excel vba 更新第二列。如何引用每个单元格以在此行之后添加撇号:
myRange = .Range("b2:b").Value
这是到目前为止的其余代码:
> Private Sub cmdTest_Click()
>
> Dim objExcel As Excel.Application Dim objWB As Excel.Workbook Dim
> objWBtoAdd As Excel.Workbook Dim newWS As Excel.Worksheet Dim objWS As
> Excel.Worksheet Dim i As Long Dim myRange As Range Dim Cell As Range
>
> Set objExcel = New Excel.Application objExcel.Visible = True Set
> objWB = Workbooks.Open("C:\TEST\Drop\Bank.xlsx", , False) Set
> objWBtoAdd = Workbooks.Add Set newWS = objWBtoAdd.ActiveSheet Set
> objWS = objWB.ActiveSheet
>
> With objWS
>
>
> myRange = .Range("b2:b").Value
>
> .Range("b2:b").Value = myRange
>
>
>
> End With
>
>
>
>
>
> End Sub
解决方案
你的代码:
- 声明和分配
objWBtoAdd
,newWS
但它们没有在任何地方使用 - 变量
i
,cell
也没有使用 - 它只是尝试将无效范围分配
.Range("b2:b").Value
给另一个 Range 变量 - 然后将 Range 变量恢复为无效范围,无需修改值
此表示法不是有效的范围:.Range("b2:b")
- 它应该包含第一个单元格的地址 -
"B2"
&":"
&"B9"
(范围内最后一个单元格的地址)
如果您需要“通过在范围内每个单元格的开头添加撇号来更新第二列”并将该列复制到新工作表,请尝试以下代码
Option Explicit
Private Sub cmdTest_Click()
Const INI_PATH = "C:\TEST\Drop\Bank.xlsx"
Const NEW_PATH = "C:\TEST\Drop\BankNew.xlsx"
Dim xlApp As Excel.Application: Set xlApp = New Excel.Application
Dim wbIni As Excel.Workbook: Set wbIni = xlApp.Workbooks.Open(INI_PATH, , False)
Dim wbNew As Excel.Workbook: Set wbNew = xlApp.Workbooks.Add
Dim ws As Excel.Worksheet, colBIni As Range, colBNew As Range, lr As Long
'xlApp.Visible = True
Set ws = wbIni.ActiveSheet 'Prefer explicit: Set ws = wbIni.Worksheets("Sheet3")
lr = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
Set colBIni = ws.Range(ws.Cells(2, "B"), ws.Cells(lr, "B"))
Set ws = wbNew.ActiveSheet 'Prefer explicit: Set ws = wbNew.Worksheets("Sheet1")
Set colBNew = ws.Range(ws.Cells(2, "B"), ws.Cells(lr, "B"))
Dim arr As Variant, r As Long
arr = colBIni.Value2 'copy colB to array
For r = 1 To UBound(arr)
arr(r, 1) = "'" & arr(r, 1) 'modify array values
Next
'colBIni.Value2 = arr 'paste array to colB (Ini file)
colBNew.Value2 = arr 'paste array to colB (New file)
wbNew.Close SaveChanges:=True, Filename:=NEW_PATH 'Save new File
wbIni.Close SaveChanges:=False
End Sub
.
如果 B 列仅包含公式或 URL,则不需要使用For
循环
With ws.UsedRange.Columns("B") 'all cells with data (and formatting) in column B
.Replace "=", "'="
.Replace "https://", "'https://"
End With
推荐阅读
- php - Laravel 删除只是不工作
- javascript - 加载资源失败:服务器响应状态为 405 ()
- ruby-on-rails - 撬显示模型命令不起作用
- javascript - 错误:需要数据和盐参数(节点未接收来自角度的用户输入对象?)
- python - ModuleNotFoundError:没有名为“cherrypy”的模块
- ember.js - 无法使用“get”Ember 3.2 加载关系
- vue.js - vuetify v1.1 我可以为 v-card 颜色设置一些透明度吗?
- material-design - 在 Flutter 中平滑过渡状态
- java - Java和正确使用类层次结构
- swift - 如何以编程方式添加 imageView 宽度/高度?