我有一个模板文档,其中包含几个部分和几个表.问题是,我正在尝试在表格中的单元格中插入一个下拉列表.要使下拉列表起作用,需要保护文档.但是,如果我保护表格所在的整个部分,则整个表格都受到保护.
所以,我想知道是否有一种方法可以执行宏代码,如果用户点击下拉列表?然后代码将保护文档,使控件实际工作,然后选择一个选项,当用户在字段外单击时,文档应该不受保护.
这可能吗?
我需要将IP地址拉出到VBA宏中.此代码有效,但命令对话框可以短暂显示,这看起来并不好看.我可以使用修改"静默"吗?
Sub getIP()
Set objShell = CreateObject("WScript.Shell")
Set objExecObject = objShell.Exec("%comspec% /c ipconfig.exe")
Do Until objExecObject.StdOut.AtEndOfStream
strLine = objExecObject.StdOut.ReadLine()
strIP = InStr(strLine, "Address")
If strIP <> 0 Then
IPArray = Split(strLine, ":")
strIPAddress = IPArray(1)
End If
Loop
SynapseForm.LabelIP.Caption = strIPAddress
End Sub
Run Code Online (Sandbox Code Playgroud)
更新,找到一个使用Wscript.Shell写入临时文件的变体,这个"默默地"工作不如下面Remou的方法那么好
Sub getIPAddress()
Dim IP_Address: IP_Address = GetIP()
If IP_Address = "0.0.0.0" Or IP_Address = "" Then
MsgBox "No IP Address found.", , ""
Else
MsgBox IP_Address
'MsgBox IP_Address, , "IP address"
End If
End Sub …Run Code Online (Sandbox Code Playgroud) 我有一个宏需要大约五秒钟来执行,我正在使用代码,Application.ScreenUpdating = False所以看起来Word在运行时已经锁定.
我在最后使用一个消息框告诉他们它是完整的,但我想在执行过程中显示一个图像告诉用户宏正在运行(主要是因为他们不会担心,但也因为它更好看着).
可能有一种更简单的方法,但我决定创建一个图像,创建一个非常基本的用户表单,并简单地将我的图像设置为其背景.然后,一旦代码开始运行,我就会弹出该用户表单.
我遇到的问题是,除非我关闭它,否则其余代码将不会执行.它只是挂起,直到我做某事.有没有办法让我可以在不停止其余流程的情况下显示用户表单?如果没有,是否有另一种方法可以在宏运行时显示图像?
在我为其构建一些VBA代码的word文档中,我需要能够在用户窗体上显示图像,并且还要调整用户窗体的大小以适应它呈现的任何图像.
当我在立即盒子中尝试这样的东西时我很困惑(图像文件实际上只有675像素宽):
? LoadPicture("C:\Users\arose\Desktop\Security Control Doc\Images\AC1.bmp").Width
17859
Run Code Online (Sandbox Code Playgroud)
最终我发现这是因为VBA使用了除像素之外的某些单位.缇,或类似的东西.但我真的需要以像素为单位的图像大小,所以我四处乱逛,大致发现转换因子是什么,我正在使用它:
Function TwipsToPixels(Twips As Long) As Long
TwipsToPixels = Twips / 25.477
End Function
Run Code Online (Sandbox Code Playgroud)
这有所帮助,但并不是特别准确.所以我的问题是,有没有人有更优雅和精确的方式来获得VBA中的图像大小?
我需要插入一组行的多个副本,格式如下所示.
+-------------------------------------------------+ | 1,1 | +-------------------------------------------------+ | | 2,2 | | 2,4 | | | 2,1 +---------+ 2,3 +---------+ 2,5 | | | 3,2 | | 3,4 | | +-------------------------------------------------+ | 4,1 | +-------------------------------------------------+ | | 5,2 | | 5,4 | | | 5,1 +---------+ 5,3 +---------+ 5,5 | | | 6,2 | | 6,4 | | +-------------------------------------------------+
在案例A中,我需要在第4行之前插入第1-3行的多个副本.
在案例B中,我需要在表格末尾插入4-6行的多个副本.
table.rows(n)方法不起作用,并给出以下错误:
运行时错误'5991':
无法访问此集合中的各个行,因为该表具有垂直合并的单元格
但是,可以从用户界面执行此操作,因此必须可以!
I have a word document which is updated periodically. I can go into that Word document, select the contents of an entire table and copy, then go into an Excel spreadsheet and paste it. It's screwed up; however, I fix it as follows:
sht.Cells.UnMerge
sht.Cells.ColumnWidth = 14
sht.Cells.RowHeight = 14
sht.Cells.Font.Size = 10
Run Code Online (Sandbox Code Playgroud)
This manual copy-paste works regardless of whether the table is has merged fields. Then I can start to manipulate it manually: parsing, checking, computations, etc.
I can …
您如何使用VBA清除Microsoft Office剪贴板,特别是Word VBA?
我正在将大量数据复制到剪贴板中,并且不希望在剪贴板中保留过多的数据.
如果我尝试从一个空的剪贴板粘贴,则会出现错误。我想在粘贴之前检查剪贴板中是否没有文本,以便避免这种情况。如何做到这一点?我知道可以通过错误处理来完成,但是我更喜欢避免错误的方法。
编辑-根据请求,添加创建错误和错误消息的代码:
导致问题的代码:
Sub PasteFromEmptyClipBoard()
Selection.Paste
End Sub
Run Code Online (Sandbox Code Playgroud)
我收到的错误消息:
“运行时错误'4605',此方法或属性不可用,因为剪贴板为空或无效。”
我有一个情况,我需要clear变量,lastWord以便msgbox下一步显示任何内容loop.
下面的代码只是一个例子.
Sub clear_lastWord_Variable()
Dim wordArr() As String
Dim lastword As String
Do
selection.Find.ClearFormatting
selection.Find.Font.Bold = True
With selection.Find
.Forward = True
.Wrap = wdFindStop
End With
selection.Find.Execute
If selection.Find.Found Then
wordArr = Split(selection, " ")
For i = LBound(wordArr) To UBound(wordArr) Step 1
lastword = wordArr(i)
Next i
MsgBox lastword
' here should be something to clear lastword
Else
Exit Do
End If
Loop
End Sub
Run Code Online (Sandbox Code Playgroud) 我正在尝试进行保存 - 与Word 2016中的以下代码一样:
Dim doc As Word.Document
Dim fpFile as string
Set doc = ActiveDocument
fpFile = doc.Path & "\" & doc.Name
doc.SaveAs Filename:=Left(fpFile, Len(fpFile) - 4) & "docx", FileFormat:=wdFormatDocument
Run Code Online (Sandbox Code Playgroud)
使用Left和Len函数的My Filename参数求值为:
C:\ Users\My Name\Documents\My Company\My Client\test folder\HeaderTemplate.docx
这对我来说很好,但我收到错误6294:SaveAs行上的'不兼容的文件类型和文件扩展名'.
我已经尝试将Filename首先放入一个字符串变量,我尝试了SaveAs2方法,两者都有相同的结果.我想保存为标准的非宏启用的docx文件.
有任何想法吗?
谢谢.