Excel Vba 如何将单元格的值,同步显示在窗体中的LABEL或TEXTBOX中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel Vba 如何将单元格的值,同步显示在窗体中的LABEL或TEXTBOX中?相关的知识,希望对你有一定的参考价值。

1、Excel Vba 如何在sheet中运行单元格赋值的循环代码,将指定位置单元格的值,同步显示在窗体中的LABEL或TEXTBOX中?
2、指定位置的单元格中的数据会在运行循环代码中变化。

如何将单元格实时变化的值,传递给VBA窗体中的label或textbox?

简单举例:
sheets代码:
for i = 1 to 10000
range("A3").value = i
userform1.show
userform1.label1.caption = range("A3").value
next

以上简单的代码只是表达意思,和我实际的代码不一样。
运行问题:弹出窗体后关闭此窗体才能运行sheet中的代码;更改写法后,只有在运行sheet代码后才能在窗体中显示指定单元格最终的值,窗体label不能实时随单元格更新?

请高手提点!
CPU 100% 问题,有控制CPU功率或进程的方法吗?
延迟会影响速度!

1、首先,在电脑中找到并打开Excel,在工具栏找到开发工具。

2、然后,在开发工具栏下点开VisualBasic。

3、然后,使用lable控件来来显示变量内容,接着双击按钮1进入按钮1的代码编写。

4、在按钮1中输入:UserForm1.Label1.Caption = a。

5、然后,回到form,点击运行窗体。

6、最后,lable位置发生了变化,显示了变量a的值。

参考技术A

步骤如下:

    Sheet1的A1:A10中有如下内容

    插入窗体,并插入一个复选框


    双击窗体,添加如下代码

    按F5执行代码,结果如下:

参考技术B 似乎你的代码只能放在事件里,才能实现,比如点击按钮事件,鼠标移动事件,值改变事件,激活事件等。你想想你的这段代码是在什么情况下触发的,把它放在对应的事件里。

注意 :必须加上延时才能看出效果

如果你这段代码是窗体一弹出,就运行,可以把它放在 UserForm_Activate事件里
private Sub UserForm_Activate()

Dim i As Integer

For i = 0 To 100
LabelFile1 = i
delay (10)// 延时
Next

End Sub

'***********延时*************************************
Sub delay(T As Single)
Dim T1 As Single
T1 = Timer
Do
DoEvents
Loop While Timer - T1 < T
End Sub
'延时
****************************************
不好意思,才看到。不知道你解决没有。我这边CPU是50%。
解决办法没找到,,5555555555555
55,不好意思哦。本来可以用SLEEP的,可是SLEEP要刷屏,而你那是在窗体内,上班又没时间研究,你请教下高人,小女子不好意思本回答被提问者采纳
参考技术C form1.label1.caption = cells(i,j)
form1.text1.text = cells(i,j)
一般有窗体的情况下,VBA代码是直接写在窗体的代码中的。这时候,form1就可以去掉了。如下:
label1.caption = cells(i,j)
text1.text = cells(i,j)
代码中的label,text1,form1替换成实际的控件名称。
参考技术D
Worksheet_Change的事件中填写代码。
lable1.caption=range("a1").value

如何使用 VBA 检测不适合 Excel 单元格的值?

【中文标题】如何使用 VBA 检测不适合 Excel 单元格的值?【英文标题】:How to detect values that do not fit in Excel cells, using VBA? 【发布时间】:2012-06-11 10:39:57 【问题描述】:

我们正在使用各种工具生成长 Excel 工作表,这些工作表必须在工作流程中进一步审查并用作输入。 某些单元格对于它们包含的文本来说太小了的问题。 因此,正在阅读工作表的人和程序将不会看到相同的数据。

当 Excel 未正确调整行高时,这通常适用于包含自动换行文本的合并单元格。但也有其他情况:例如,当某些列明确设置了宽度时,这对于长值是不够的。

|Group|Def1 |Subgroup|Definition| Id   |Data |Comment   |
|-------------------------------------------------------|
| G1  |     | G1-1   |Important |G1-1-1|...  |          |
|     |Long |        |about G1-1|G1-1-2|.....|........  |
|     |text |-------------------------------------------|
|     |about| G1-2   |Another   |G1-2-1|...  |          |
|     |group|        |important |G1-2-2|...  |long comme|
|     |G1.  |        |text about|G1-2-3|     |          |
|-------------------------------------------------------|

这里,“定义”和“注释”中的某些单元格不完全可见。 有什么方法可以通过编程方式找到这样的单元格吗?

【问题讨论】:

我依稀记得@SiddharthRout(可能是其他人)最近发布了一个非常相似问题的答案。希望那个人会在这里发布他们的解决方案。 【参考方案1】:

要检测这些单元格(我不是在谈论解决问题),您可以使用 Range 对象的 Text 方法。

例如,Range("A1").Value 可能是 123456789,但如果它的格式为数字并且列不够宽,Range("A1").Text 将是“###”(或者单元格中可以容纳许多 # 符号)。

【讨论】:

我认为 Text 只是在单元格包含字符串时返回值。它没有检测到任何东西。但是,对于日期和数字,它就像您描述的那样工作,这可能很有用,谢谢。【参考方案2】:

这是我以前用过的一个技巧:

With Columns("B:B")
    oldWidth = .ColumnWidth ' Save original width

    .EntireColumn.AutoFit
    fitWidth = .ColumnWidth ' Get width required to fit entire text

    .ColumnWidth = oldWidth ' Restore original width

    If oldWidth < fitWidth Then
        ' Text is too wide for column.
        ' Do stuff.
    End If
End With

当然,这将一次应用于整个列。您仍然可以通过将单元格一个接一个地复制到一个虚拟列并在那里进行AutoFit 测试来使用它。

但可能对您更有用的是我对这个问题的较早回答:Split text across multiple rows according to column width。它描述了一种确定任何给定单元格中文本宽度的方法(并将其与单元格的实际宽度进行比较以确定文本是否适合)。

编辑回复您的评论:如果您的某些单元格足够高以显示 2 行或更多行文本,那么您可以使用我的previous answer 中描述的类似方法,首先使用.EntireRow.AutoFit 确定字体的高度,.RowHeight 确定单元格中可以容纳多少行,然后使用前面的方法确定文本是否可以容纳该宽度的单元格中的行数题。

【讨论】:

谢谢。即使每个值都有足够的垂直空间,AutoFit 也倾向于解开长字符串并扩展列宽。在我的示例中,您的方法几乎在每个单元格中都给出了误报。 什么例子?!愿意与我们分享吗? 现实生活中的例子很大,包含客户的数据,但我在问题中添加了一个简单的说明。【参考方案3】:

取消合并工作簿中的所有单元格并使用 Thisworkbook.sheets("Name").rows(index).entirerow.autofit 列也是如此。 除了美学原因,保留合并的单元格有什么用? 仅考虑“基本单元格”的值(左上角)。

【讨论】:

谢谢。生成的表格供人类使用,因此美学原因不容忽视。不过,尽可能避免合并是一个非常好的建议。【参考方案4】:

我今天遇到了同样的问题。我正在尝试这个技巧来躲避它。也许,它可能对你有用。编码处理一列宽合并区域:

'Sheet2 is just merely support tool no data sheet in ThisWorkbook
With Sheet2.Range(target.Address)
    target.Copy
    .PasteSpecial xlPasteAll
    .UnMerge
    If .MergeArea.Count > 1 Then .UnMerge
    .ColumnWidth = target.ColumnWidth
    .Value = target.Value
    .EntireRow.AutoFit
    target.MergeArea.EntireRow.RowHeight = _
         1.05 * .RowHeight / target.MergeArea.Rows.Count
    .ClearContents
    .ClearFormats
End With

不幸的是,如果有几列像这样合并了单元格,那么它们相互需要的高度可能会相互冲突,并且需要额外的代码来恢复和谐。看起来像一段有趣的代码。 希望这对您有所帮助。

【讨论】:

以上是关于Excel Vba 如何将单元格的值,同步显示在窗体中的LABEL或TEXTBOX中?的主要内容,如果未能解决你的问题,请参考以下文章

从 vba 中的单元格地址获取 excel 合并单元格的值

如何在 Excel VBA 中为目标查找同一行的第一个单元格的值?

Excel VBA 根据下拉框单元格的值来改变另一个下拉框单元格的值

vba如何读取excel中某单元格的行数或列数

vba怎样把一个单元格中的值赋给另一个单元格

Excel vba中怎样填写数值改变单元格后触发事件