我的任务是创建一个安全的(Windows 版本)Excel 工作簿,该工作簿使用宏来验证用户是否有权查看内容。在 Excel 2010 for Windows 中,我使用该Environ("username")函数来完成此操作。
我遇到的问题是组织中的一些用户使用 Mac 来完成日常工作,而Environ不能使用 OSX。
有谁知道找到 Mac 用户名的另一种方法?我在网上查过,但我能找到的只是如何找到计算机的唯一标识符,而不是用户名。
我试图用 Mac 做的事情甚至可能吗?
任何信息表示赞赏!
编辑:几个月后,我再次尝试使用我第一次尝试的相同语法(在下面发布).出于某种原因,它奏效了!也许除了我的语法之外的其他东西导致无效...结束编辑
我一直在搜索论坛几个小时,现在试图找到解决这个问题的方法,但我没有尝试过任何工作.
我正在使用VBA自动化在SurveyMonkey上创建调查的过程.到目前为止,我已经能够:
问题不在于我无法选择单选按钮; 我的代码选择前三个按钮就好了.令我困惑的是,第四个按钮不会改变!我对每个按钮使用相同的过程,所以我无法弄清楚为什么最后一个按钮不会选择.
这是我的代码部分:
objIE.Document.getElementById("rdlResponseType_1").Click 'Allow multiple responses = Yes
objIE.Document.getElementById("rdlResponseEdit_1").Click 'Allow Responses to be Edited = Yes
objIE.Document.getElementById("rdlThankyou_1").Click 'Display a "Thank You" page? = Yes
objIE.Document.getElementById("rdlCompleteOpt_1").Click 'Survey Completion = Close Window
Run Code Online (Sandbox Code Playgroud)
这是单选按钮的HTML:
<table border="0" cellpadding="0" cellspacing="0" style="width: 100%;">
<tr id="CompleteOptDesc">
<td style=""> </td>
<td>After the respondent leaves the survey:</td>
</tr>
<tr id="CompleteOptItems">
<td style=""> </td>
<td align="left" nowrap="nowrap" valign="top">
<table id="rdlCompleteOpt" class="Clean radioList" OnClick="radioToggle('rdlCompleteOpt', '0', 'panLink');" name="rdlCompleteOpt" border="0" style="white-space: nowrap">
<tr>
<td><span style="white-space: nowrap"><input …Run Code Online (Sandbox Code Playgroud) 我开发了一个包含自定义功能区的 Excel 加载项。我希望能够在某些情况下使功能区上的控件无效(启用/禁用),但是我能找到的每个示例都使用模块级或全局变量在首次加载功能区时存储功能区对象。这似乎是一个很好的方法,但是,正如这里列出的那样,有些情况下变量可以为空。
所以我想知道,是否有不同的方法来实现在 Excel 功能区中启用/禁用控件的结果,而不使用变量来存储功能区对象,甚至根本不使用 invalidate 方法?
编辑:要解决这个问题,我换Dim Placed As Range到As Long.然后我改变了
Set Placed = Rows("3:3").Find("Placed", Range("A3"), searchdirection:=xlToRight)
Run Code Online (Sandbox Code Playgroud)
至
Placed = Rows("3:3").Find("Placed", Range("A3"), searchdirection:=xlToRight).Column
Run Code Online (Sandbox Code Playgroud)
代码现在运行得很好.结束编辑
好的,我已经在这个问题上工作了近两个小时了.
我正在尝试在工作表上编写几个选项按钮来根据需要过滤数据.
首先,我记录了自己过滤数据给我一个起点.这是录音机吐出的内容:
ActiveSheet.Range("$A$3:$CS$212").AutoFilter Field:=53, Criteria1:=Array( _
"Iteration 1", "Iteration 2", "Iteration 3", "Tradeshow", "="), Operator:= _
xlFilterValues
Run Code Online (Sandbox Code Playgroud)
为了使选项按钮更加健壮,我决定使用变量,以防添加了列或行,或者添加了标准.
我加了一个可变的Range(),Field:=以及Criteria1:=,但我的代码现在抛出这个错误:Run-time error '1004': Autofilter Method of Range class failed.
我想知道我是否使用Array不当......?无论如何,这是我的声明:
Const Opt1 As String = "Iteration 1"
Const Opt2 As String = "Iteration 2"
Const Opt3 As String = …Run Code Online (Sandbox Code Playgroud) 我不确定如何解决这个问题.我做了很多研究,但我找到的大部分答案都与我需要的有些不同.
我想要完成的是:
我的宏可以完成上面列出的每一步,除了第四和第五.一方面,我想知道我是如何追求这一点的,另一方面,我想知道它在我当前的代码中的位置.
为了举例说明我正在谈论的内容:让我们说在第三步中我打开一个名为"01.31.13 Group Names"的工作簿.并且文件路径来自Sharepoint站点,因此它看起来像这样:
如何只选择文件名/文件路径中的日期?
这是我的代码的开头:
Sub Test()
Dim lastRow As Long, i As Long
Dim ws As Worksheet
Dim wbSource As Workbook
Dim wbAI As Workbook
Dim vrtSelectedItem As Variant
Set wbAI = ActiveWorkbook
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = https://company.com/team/teamone & "\"
.AllowMultiSelect = False
.Show
' ****** Is this where the new code could be inserted? *******
For …Run Code Online (Sandbox Code Playgroud) 浏览论坛一个多小时后,我似乎无法弄清楚为什么我的另存为代码不起作用。
我的目标是在不同的文件类型下保存工作簿的新副本。(当前文件类型是 .csv。)我不想保存在新的或不同的位置,当前目录是我想要保存到的位置。
我已经尝试了比我记得的更多的以下代码的变体,所以我将发布我当前的语法:
CurrentDir = CurDir()
dateVal = Date
ActiveWorkbook.SaveAs Filename:="" & CurrentDir & "ALS Week of " & dateVal - 4 & ".xlsx", FileFormat:=51
我已经查看了如何打开一个对话框的示例,用户可以在其中输入信息以进行保存。但我希望采取一种不干涉的方法。如果有人能看到我的错误所在,请告诉我!
编辑:
我得到的错误是"Method 'SaveAs' of object '_Workbook' failed
我在Excel 2010的摘要表中使用了六个切片器。每个切片器都连接到26个数据透视表。
我过去使用下面的代码来清除切片器的选择,并且在最小延迟的情况下工作得很好。但是,这次代码需要6到7秒钟才能完全执行,这似乎不值得该功能。
Dim oSlicerC As SlicerCache
For Each oSlicerC In ActiveWorkbook.SlicerCaches
oSlicerC.ClearManualFilter
Next oSlicerC
Run Code Online (Sandbox Code Playgroud)
我一直在寻找一种加速宏/使其更有效的方法,但是我在网上找不到任何东西。我尝试设置ScreenUpdating,DisplayAlerts和EnableEvents,False然后在代码开头尝试设置Calculation为xlCalculationManual,但这并没有太大帮助。
我曾考虑过遍历每个对象SlicerItem以取消选择每个对象,但是在几个切片器中最多包含100个项目,我不确定这会更快。
是否有人对我如何能够做到这一点有任何想法?我不是在寻找代码,因为我想自己尝试一下,但是我不确定应该走哪条路,或者是否有比我已经在使用的方法更有效的选择。非常感谢!
我搜索过这个网站,似乎所有的答案都只是指向找到单元格的行号.
我试图设置一个范围,以便它将从列A1到数据的末尾A.此电子表格将每周更新,以便每周都会添加数据.
我想知道什么代码可以工作,以便我可以找到行号并以某种方式将其与我的范围代码绑定,以便它将相等"A" + lastrownumber?或者,如果有代码将列和行号一起提供?如果我错过了正确答案的链接,也会有一个简单的链接,我为帖子和你的时间道歉.
这是我的代码:
Sub NamedRange()
Dim Rng1 As Range
Dim newDate As Integer
Dim NumberOfRows As Range
Dim MyRange As Range
Dim lastRow2 As Range
lastRow2 = Range("A65536").End(xlUp).Row
'lastRow2 = LastRow
Set Rng1 = Sheets("Sheet1").Range(lastRow2)
ActiveWorkbook.Names.Add Name:="MyRange", RefersTo:=Rng1
Dim date1 As String
Dim dat As Date
Dim newPrice As Double
Set RgSales = Range("MyRange")
Run Code Online (Sandbox Code Playgroud) excel ×8
vba ×8
excel-vba ×3
excel-2010 ×2
excel-2013 ×1
filenames ×1
html ×1
macos ×1
ms-office ×1
pivot-table ×1
radio-button ×1
ribbon ×1
save ×1