从Excel VBA中的控制按钮名称(名称属性)重命名

拉贾西

我已经使用vba代码通过A列中的控制按钮添加了新行。

该代码工作正常,但有一个小问题。

我试图在复制过程中更改按钮名称属性,但我不知道该怎么做?

例如,我正在复制一个名称为“ validate”的按钮,当该按钮将被复制到下一行时,我要将按钮的Name属性(而非按钮文本)更改为“ validate1”。

你能让我知道怎么做吗?

Dim Lr As Integer
Dim newLr As Integer
Dim lim, rng, sht, btn As String

Lr = Range("B" & Rows.Count).End(xlUp).Row 'Searching last row in column A
newLr = Lr + 1
lim = "B" & newLr & ":" + "D" & newLr
rng = "A" & newLr
Rows(Lr).Copy
Rows(newLr).Insert
'Range(lim).ClearContents
sht = ActiveSheet.Name
btn = "validate" & newLr
    Application.ScreenUpdating = False
    Sheets(sht).Shapes("validate").Copy
    Sheets(sht).Activate
    Sheets(sht).Range(rng).Select
    Sheets(sht).Paste
    Sheets(sht).Shapes("validate").Select
    Selection.Characters.Text = btn
    Application.ScreenUpdating = True

图片链接: https : //ibb.co/c0rFfv

Mertinc

粘贴形状后,只需编写以下代码。

Sheets(sht).Shapes(.Shapes.Count).Name = btn

因为当您添加新形状时,它具有最高的索引。因此,如果您通过找到了索引最高的形状.Shapes.Count,则可以轻松地对其重命名。

以及基于VBA最佳做法的其他一些建议:

1-始终使用明确的选项

因为如果使用它,您将看到"lim,rng,sht"未定义变量。Commas = ",'还不足以定义所有变量。您需要分别声明它们。所以代替Dim lim, rng, sht, btn As String使用Dim lim as String, rng as String, sht as String, btn As String

2-使用Long而不是Integer

因为Excel可能需要Integer to Long才能在较新版本的Excel中运行代码。首先,可以通过将变量定义为Long而不是Integer来简单地避免它。

3-从不假设工作表

不要依赖ActiveWorkbook或ActiveSheet,因为它们可能会被用户更改。

最佳做法是始终确定您的代码引用哪个工作表:

因此,在您的示例中:

Dim wb as Workbook, ws as Worksheet
Set wb = ThisWorkbook
Set ws = wb.Sheet("Sheet1")
Lr = ws.Range("B" & Rows.Count).End(xlUp).Row

这种方法永远不会误导您。

4-避免使用选择或激活

.select()很慢

.Select()是不守规矩的

.Select()将触发监听器

5-使用描述性变量命名

代码中的描述性名称和结构有助于使注释变得不必要。

这样,您的代码将更加清晰有效:

Option Explicit

Application.ScreenUpdating = False    
'It's better to switch off properties from starting of your macro
Dim wb as Workbook, ws as Worksheet
Dim Lr As Long
Dim newLr As Long
Dim sht as String, btn As String
Dim lim as Range, rng as Range  'Using these ones directly as a Range is better idea.

Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")

Lr = ws.Range("B" & Rows.Count).End(xlUp).Row 'Searching last row in column A 
'==> if you would like to count rows in A, then change your code. Now it's looking for "B".
newLr = Lr + 1
set lim = ws.Range("B" & newLr & ":" + "D" & newLr)
set rng = ws.Range("A" & newLr)
ws.Rows(Lr).Copy
ws.Rows(newLr).Insert
'Range(lim).ClearContents
sht = ws.Name
btn = "vaalidate" & newLr

    With Sheets(sht)
     .Shapes("validate").Copy
     .rng.Paste
     .Shapes(.Shapes.Count).Name = btn
    End With

Application.ScreenUpdating = True

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当按钮没有关联的“名称”时,请使用Excel VBA在Internet Explorer中单击按钮

Excel 2016中的图表名称

按钮可见属性在Excel VBA中不起作用

在Excel VBA中删除表名称

Excel VBA中的“名称”是什么意思

使用Excel中的名称映射,使用Python重命名文件夹中的文件

Excel中的形状名称

通过名称属性Excel VBA删除特定的ChartObjects

填充空单元格并从excel文件中的Excel文件中重命名多索引标头的列名称

Excel VBA重命名文件名

如何在Excel中更改命令按钮的名称

使用VBA在Excel中命名单元格名称框

Excel VBA创建按钮以复制/重命名工作表和整个工作簿

Excel中的名称范围表

Excel VBA +遍历工作表,如果工作表名称如模式,则重命名工作表

Excel:命名列的名称

参考另一个工作表VBA在Excel中重命名工作表

VBA:使用VBA从excel图表中编辑图例名称

VBA代码为控件按钮分配名称,而不是让excel生成从数字派生的按钮名称

Excel VBA 隐藏名称管理器中定义的名称

在 Excel 中重命名列标题

如何在 Excel VBA 中自动更改工作表名称

Excel VBA 循环更改选项按钮名称中的数字

如何使用vba动态更新excel中的工作簿名称?

如何使用R将多个excel的工作表重命名为相同的名称

使用excel上的名称列表重命名多个文件

如何使用vba在excel中获取单元格名称

按名称重命名多个文件 Excel VBA

EXCEL VBA:寻找代码以根据单元格值重命名具有指定名称的指定工作表