- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个惯例,在日历中填满下周每一天商品市场的所有重要事件。我在页面上布置了一个日历网格,并在每天列中每天有 10 个命名单元格,即 Monday1、Monday2 等(目前每天最多只有 10 个单元格,即 Monday10)。顺便说一句,这些单元格有 2 个单元格宽和 2 个单元格深。很多时候,某一天有超过 10 个事件。我正在尝试测试命名范围以查看它是否存在,如果不存在,则复制最后一个命名范围单元格的格式,并将该单元格命名为该系列中的下一个名称。
我对上述问题只有两个问题,首先也是最重要的是如何测试以确定命名范围的名称是否已经存在。我目前正在迭代 ThisWorkbook.Names 的整个列表,其中包含数千个命名范围。由于在生成日历时此迭代可能会运行超过 100 次,因此速度非常慢(正如预期的那样)。有没有更好、更快的方法来检查名称是否已作为命名范围存在?
第二个问题是如何复制 4 个单元格、合并单元格的格式,因为地址始终仅显示为左上角单元格,因此偏移范围无法正常工作。我设法让这段代码至少为该列中的下一个合并单元格组提供正确的范围
Set cCell = Range("Thursday" & CStr(y))
'even tho cCell is a 4 cell merged cell, cCell.Address returns the address of top left cell
Set destRange = Range(cCell.Address & ":" & cCell.offset(2, 0).offset(0, 1).Address)
录制宏以向下拖动格式,显示此代码。
Range("G22:H23").Select
Selection.AutoFill Destination:=Range("G22:H25"), Type:=xlFillFormats
Range("G22:H25").Select
由于 Range("G22:H23") 与 cCell 相同,并且 Range("G22:H25") 与 destRange 相同。下面的代码应该可以工作,但是却不能。
Set cCell = Range("Thursday" & CStr(y))
Set destRange = Range(cCell.Address & ":" & cCell.offset(2, 0).offset(0, 1).Address)
cCell.AutoFill Destination:=destRange, Type:=xlFillFormats
Application.CutCopyMode = False
cCell.offset(1, 0).Name = rangeName
仅供引用,如果我选择 cCell 并使用 Selection.AutoFill 也不起作用。
关于如何在需要时将单元格格式复制到列中,一次一个单元格,有什么想法吗?
更新:
现在,这适用于将格式从一个合并单元格复制到另一个相同大小的单元格。由于某种原因,将 destRange 设置为整个范围(宏记录器显示的复制单元格和粘贴单元整个范围)不起作用,但将 destRange 设置为需要格式化的单元格范围,然后对 cCell 和 destRange 进行联合,并进行命名新系列更容易。
rangeName = "Friday" & CStr(y + 1)
priorRangeName = "Friday" & CStr(y)
namedRangeExist = CheckForNamedRange(rangeName)
If namedRangeExist = False Then
Set cCell = Range(priorRangeName)
Set destRange = Range(cCell.offset(1, 0).Address & ":" & cCell.offset(2, 0).offset(0, 1).Address)
cCell.AutoFill Destination:=Union(cCell, destRange), Type:=xlFillFormats
Application.CutCopyMode = False
destRange.Name = rangeName
End If
更新#2
For 循环中的命名范围存在问题(下面的代码在 For 循环内运行)。第一次未找到新的范围名称时,将 cCell 设置为先前的范围名称并运行代码以复制合并的单元格格式并命名新范围可以正常工作。这是代码
rangeName = "Thursday" & CStr(y + 1)
priorRangeName = "Thursday" & CStr(y)
namedRangeExist = DoesNamedRangeExist(rangeName)
If namedRangeExist = False Then
Set cCell = Range(priorRangeName)
Debug.Print "cCell:" & cCell.Address
Set cCell = cCell.MergeArea
Debug.Print "Merged cCell:" & cCell.Address
Set destRange = Range(cCell.offset(1, 0).Address & ":" & cCell.offset(2, 0).offset(0, 1).Address)
Debug.Print "Dest:" & destRange.Address
Debug.Print "Unioned:" & Union(cCell, destRange).Address
cCell.AutoFill Destination:=Union(cCell, destRange), Type:=xlFillFormats
Application.CutCopyMode = False
destRange.name = rangename
End If
结果在以下范围内
cCell:$G$22
合并的 cCell:$G$22:$H$23
目的地:$G$24:$H$25
联合:$G$22:$H$25
但是,如果第二次需要创建多个新的命名范围,则此代码会生成一个范围区域,如下所示的输出所示
cCell:$G$24:$H$25
那么为什么第一次运行时cCell的地址仅显示左上角的单元格地址,但第二次运行时cCell的地址显示为整个合并的单元格范围?因为确实如此,下一个代码行会产生范围对象错误
Set cCell = cCell.MergeArea
删除该代码行并将第一个 Set cCell 修改为此;
Set cCell = Range(priorRangeName).MergeArea
产生同样的错误。我可以通过设置一个计数器来解决这个问题,如果超过一个,则绕过该代码行,但这不是首选解决方案。
最佳答案
首先,创建一个函数来调用命名范围。如果调用命名范围产生错误,该函数将返回 False,否则将返回 True。
Function NameExist(StringName As String) As Boolean
Dim errTest As String
On Error Resume Next
errTest = ThisWorkbook.Names(StringName).Value
NameExist = CBool(Err.Number = 0)
On Error GoTo 0
End Function
关于你的第二个问题,我的自动填充没有问题。
我会将 Set destRange = Range(cCell.Address & ":"& cCell.offset(2, 0).offset(0, 1).Address)
替换为 Set destRange = cCell.Resize(2,1)
。它具有相同的效果,但后者更干净。
关于VBA 命名范围检查名称是否存在的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38410111/
SELECT *, `o_cheque_request.member_id`, `o_cheque_request.wallet_id` FROM `o_cheque_request`, `o_mem
根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要**SELECT count(*)**呢? 无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如
我试图找出一个文件是否存在,如果存在,验证css样式是否已经存在,如果不存在,将它们写在文件末尾... 我已经完成了这一切,但分 3 个步骤: 该文件是否存在? FileInfo fi= new Fi
我们正在开发即时消息传递应用程序,并且需要在用户的化身上用绿点显示用户 friend 的“状态”。 “状态”远远超出了“my_app_is_opened_and_on_focus”,这意味着(我猜可能
模式 Movie(title, year, director, budget, earnings) Actor(stagename, realname, birthyear) ActedIn(stag
我有一个正在尝试创建的 MySQL 触发器,但无法获得正确的语法。 触发器应该遍历一组关键字并将其与插入数据库的新帖子的标题进行匹配。如果找到匹配项,它应该将新帖子分配给该存储桶并更新存储桶的关键字集
我有 3 个表......用户、更新和碰撞。 我想向发出 api 请求的用户返回最新订单的 feed 更新,并提供显示 feed 中每个状态所需的所有数据。我还需要包括更新是否已被发出 api 请求的
我正在尝试呈现一个带有 UIView 的 UIViewController。 以下是我在 viewDidLoad 方法中尝试的代码。 //create the view controller UIVi
我正在努力弄清楚如何在不对 mysql 进行两次调用的情况下从一个表中检查两件事。 我有一个 Members 表。我想测试MemberID 列中是否存在某个值,以及PhoneNumber 列中是否存在
以下代码给出了一个没有 Do Compile 错误的循环: Loop Sheets("Snap").Rows(1).AutoFilter Field:=5, Criteria1:=List
是否可以通过检查“dig”的输出来检查域名的存在? 在绑定(bind)源中,我发现了这些常量: 0 DNS_R_NOEROR 1 DNS_R_FORMERR 2 DNS_R_SERVFAIL 3 DN
Controller 有问题 我在 Windows 上使用服务器,一切正常,但在互联网上我试图访问页面 social_apartament/beauty_life/并且找不到该页面,代码错误 404这
/** This is struct S. */ struct S(T) { static if(isFloatingPoint!T) { /// This version works
JVM 类型删除如何帮助 Clojure?没有它,Clojure 还能存在吗?如果 JVM 有具体化的类型会发生什么?也就是说,Clojure 将如何改变? 最佳答案 Clojure 根本不会有太大变
许多论文等提到对“system()”的调用是不安全且不可移植的。我不反对他们的论点。 不过,我注意到许多 Unix 实用程序都有一个等效的 C 库。如果没有,源可用于各种这些工具。 虽然许多论文和此类
在我的 Node js 应用程序中,我有一个用户登录 api。上面我在服务器端代码中创建了一个名为 customerid 的变量。现在,当用户身份验证成功时。我将他的 userid 值存储在我的 cu
我有一个工作资源管理器组,由 Ubuntu 14.04 虚拟机、网络接口(interface)、公共(public) IP 地址和存储帐户组成。我已经从这组资源中创建了一个模板。 当我尝试部署这组资源
我有一个函数createminor4(arr,锦标赛)它基本上将arr分成4组,每组8人,然后将它们一次交换到tourney 1组。从那里它插入四个{},其中有 4 个带有空数组的键。 我已经在 Ch
我有一个图表,其中有两个图例。我需要更改其中一个图例的点的大小。 我需要更改图例中“市场类型”的项目符号大小。我使用示例 here但不适用于我的图表。 我的代码如下: k <- ggplot(subs
我有 fiddle here展示我正在尝试做的事情。 我有一个动态生成的表,因此列可以按用户选择的任何顺序显示。因此,我尝试获取两个特定 header 的索引,以便可以将 CSS 类添加到这两列以供稍
我是一名优秀的程序员,十分优秀!