Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将粘贴目标设置为另一个工作表上的上次使用的行

将粘贴目标设置为另一个工作表上的上次使用的行
EN

Stack Overflow用户
提问于 2020-04-17 22:26:56
回答 2查看 45关注 0票数 0

非常感谢您抽出时间来帮助我!我现在正在做一个项目,其中一部分让我卡住了。我对VBA不是很精通,所以我完全有可能在这里遗漏了一些非常明显的东西。

目标:复制一组不连续的单元格(例如,d69、d70、d72、d73、g92、g93等)并将它们粘贴到另一个工作表上的另一个(这次是连续的)单元格区域中,位于最后使用的行下面的行中。

上下文:我正在创建一个从工作表1上的“用户窗体”填写的信息数据库。当用户单击宏链接按钮时,数据将作为新条目复制到工作表2。

想法:我一直在想,将一个变量设置为工作表2中使用的最后一个单元格的值,然后对需要复制的每个单元格使用类似范围(“b”&“aa”)的.pastespecial xlPasteValues,可能会更容易。然而,我无法弄清楚这一点,也找不到我需要做些什么来实现这一点。任何帮助都将不胜感激!非常感谢。

如果您有任何问题,或需要澄清,请让我知道!谢谢!

请参阅下面的文档链接:

Working File

EN

回答 2

Stack Overflow用户

发布于 2020-04-18 00:55:26

在您的注释澄清并将Workbook添加到您的问题之后,我已经编辑了此答案以反映这些更新。

假设您知道sheet1上每个值的单元格地址和单元格地址是常量。

我已经编写了一个Subroutine来捕获BBU Quote Entry表单的值并将它们写入到BBU Quote Database范围中。我已经将这个添加到了Module4

需要注意的是,该代码仅适用于表单的基本信息部分和使用function ReturnFormControlCaption__的HazardousNon-Hazardous的2个选项按钮。你可以把剩下的数据放在硬码中(或多或少只是复制粘贴,重命名变量,调整范围值,并将变量添加到数组中)。

代码语言:javascript
运行
AI代码解释
复制
Sub BBUEntryToDatabase()

Dim CustCompany As String
Dim CustName As String
Dim CustLocation As String
Dim CMTRep As String
Dim QuoteNo As String
Dim QuoteDate As String
Dim Hazard as String

With ThisWorkbook.Sheets("BBU Quote Entry")

    CustCompany = .Range("D6").Value
    CustName = .Range("D8").Value
    CustLocaction = .Range("D10").Value
    CMTRep = .Range("G6").Value
    QuoteNo = .Range("G8").Value
    QuoteDate = .Range("G10").Value
    Hazard = ReturnFormControlCaption("BBU Quote Entry", "HazardousButton", "NotHazardousButton")

End With

Dim BBUArray As Variant
'The Array is assigned in order of your headings on "BBU Quote Database" sheet
BBUArray = Array(QuoteNo, CustCompany, CustName, CustLocation, CMTRep, QuoteDate, _
 "Clearance", "Height", "Material", "Density", Hazard) 

Dim Destination As Range
Dim LastRow As Long

    With ThisWorkbook.Sheets("BBU Quote Database")
        LastRow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
        Set Destination = .Cells(LastRow, 2)
        Set Destination = Destination.Resize(1, UBound(BBUArray, 1) + 1) ' + 1 as the array is 0 based (whereas columns start at 1).
        Destination.Value = BBUArray
    End With

End Sub

这里是我的数据输入的屏幕截图

和"BBU报价数据库“上的输出(使用相同的输入进行了3次测试后)

我对Form Controls不是很熟悉,因为我通常使用ActiveX Controls,我发现它更容易与OptionButtons一起使用-我想可能有一种更简洁的方法来处理OptionButtons__。

ReturnFormControlCaption() function:

代码语言:javascript
运行
AI代码解释
复制
Function ReturnFormControlCaption(ByVal SheetNameTheControlIsOn As String, ByVal FirstFormControlName As String, _
    Optional ByVal SecondFormControlName As String, Optional ByVal ThirdFormControlName As String, _ 
    Optional ByVal FourthFormControlName As String, Optional ByVal FifthFormControlName As String, _ 
    Optional ByVal SixthFormControlName As String) As String

With ThisWorkbook.Sheets(SheetNameTheControlIsOn)

    If SecondFormControlName = "" Then
        If .Shapes(FirstFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FirstFormControlName).OLEFormat.Object.Caption
        Else
            ReturnFormControlCaption = "Not Specified"
        End If
    ElseIf ThirdFormControlName = "" Then
        If .Shapes(FirstFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FirstFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(SecondFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(SecondFormControlName).OLEFormat.Object.Caption
        Else
            ReturnFormControlCaption = "Not specified"
        End If
    ElseIf FourthFormControlName = "" Then
        If .Shapes(FirstFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FirstFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(SecondFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(SecondFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(ThirdFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(ThirdFormControlName).OLEFormat.Object.Caption
        Else
            ReturnFormControlCaption = "Not specified"
        End If
     ElseIf FifthFormControlName = "" Then
        If .Shapes(FirstFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FirstFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(SecondFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(SecondFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(ThirdFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(ThirdFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(FourthFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FourthFormControlName).OLEFormat.Object.Caption
        Else
            ReturnFormControlCaption = "Not specified"
        End If
    ElseIf SixthFormControlName = "" Then
        If .Shapes(FirstFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FirstFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(SecondFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(SecondFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(ThirdFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(ThirdFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(FourthFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FifthFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(FifthFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FifthFormControlName).OLEFormat.Object.Caption
        Else
            ReturnFormControlCaption = "Not specified"
        End If
    Else
        If .Shapes(FirstFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FirstFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(SecondFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(SecondFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(ThirdFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(ThirdFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(FourthFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FifthFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(FifthFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(FifthFormControlName).OLEFormat.Object.Caption
        ElseIf .Shapes(SixthFormControlName).OLEFormat.Object.Value = 1 Then
            ReturnFormControlCaption = .Shapes(SixthFormControlName).OLEFormat.Object.Caption
        Else
            ReturnFormControlCaption = "Not specified"
        End If
    End If
End With

End Function

为了简要解释该函数,您需要传递相关工作表名称的string变量,以及至少一个(最多六个)表单控件名称。

冗长且嵌套的If...ElseIf...Else语句首先被建立到包含了哪个参数。然后,根据哪个参数是第一个空或""值,它将执行下一条If...ElseIf...Else语句,以确定在本例中选择了哪个OptionButton,然后返回该OptionButton.Caption

如果未选择任何正在评估的OptionButton,则返回"Not specified“。

注意:此函数用于确定检查了哪个CheckBox,但是如果在您传递的参数中选择了多个,它将只返回第一个被检查的的.Caption。通过一些修改,您可以使函数同时适用于这两种类型,包括所有被检查的CheckBox

Chip Pearson有一些关于数组以及如何使用数组的优秀信息。您可以在他的网站www.cpearson.com上阅读它们,或者特别是我们在这里针对arrays on this article on his website所做的工作

票数 0
EN

Stack Overflow用户

发布于 2020-04-21 15:18:02

另一种可能更容易实现的方法是使用helper列来“存储”输入值,然后将该范围放入一个数组中,以便直接写入数据库表。

假设您的帮助器列位于名为" helper "__的新工作表上,数据输入位于名为"BBU Quote Entry"的工作表上,并且数据正在移动到BBU Quote Database__。

代码语言:javascript
运行
AI代码解释
复制
Sub BBUEntryToDatabaseUsingHelper()

Dim UserInputsArray() As Variant
Dim HelperRange As Range
Dim Destination As Range
Dim LastBBUDatabaseRow As Long
Dim LastHelperRow As Long

With ThisWorkbook.Sheets("Helper")
    LastHelperRow = .Cells(Rows.Count, 2).End(xlUp).Row
    Set HelperRange = .Range("B2:B" & LastHelperRow)
End With

UserInputsArray() = HelperRange.Value

With ThisWorkbook.Sheets("BBU Quote Database")
    LastBBUDatabaseRow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
    Set Destination = .Cells(LastBBUDatabaseRow, 2)
    Set Destination = Destination.Resize(1, UBound(UserInputsArray, 1))
    Destination.Value = Application.Transpose(UserInputsArray)
End With

End Sub

输入表单:

帮助器列:

这只需在辅助工作表上引用输入工作表中的相关单元格即可。

例如,"Customer Company“值位于工作表BBU Quote Entry上的单元格D6中,因此helper列具有='BBU Quote Entry'!D6

对于“危险”引用,我找到了表单控件OptionButtons链接到的单元格(E74 on Sheet BBU Quote Entry和used =IF('BBU Quote Entry'!E74 = 1, "Hazardous",IF('BBU Quote Entry'!E74 = 2,"Non-Hazardous","Not Specified"))

由于您有一些自定义格式,例如"Desired Clearance“值将输入格式化为#### Inches,引用只返回输入的值,而不返回格式-您可以进一步研究解决这个问题,但同时我在值引用后添加了一个字符串,例如"Desired Clearance”=('BBU Quote Entry'!D15) & " Inches"

将数据以正确的顺序保存到您的"BBU报价数据库“工作表中,我们只需将"Helper”工作表中的范围直接放入Array(),然后将数组写入"BBU报价数据库“中的正确范围即可。

输出如下所示:

这就是我可能会做的事情。更少的代码,更容易维护,因为两个范围都是动态设置的,所以如果你最终向表单添加了更多的输入,只需在帮助表上包括它们的引用,代码将在你下次运行代码时自动包括新值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61281699

复制
相关文章
java动态编译类文件并加载到内存中
  如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270214.html
程序员一一涤生
2019/09/10
3.2K0
云硬盘怎么挂载到linux?云硬盘可以挂载到任何系统吗?
云产品在现在的网络技术当中非常普遍和常用,很多大型的云产品公司推出了不同类型的硬盘以及云服务器,这些产品可以满足不同企业以及不同个人的网络用品需求,而且可以提供非常多丰富功能。云硬盘在某些公司或者个人使用当中已经取代了硬盘的功能,而且云硬盘拥有容易扩展以及存储文件安全的性能。现在来了解一下云硬盘怎么挂载到linux。
用户8715145
2022/03/23
12.1K0
JVM | 从类加载到JVM内存结构
我在上篇文章:JVM | 基于类加载的一次完全实践 中为你讲解如何请“建筑工人”来做一些定制化的工作。但是,大型的Java应用程序时,材料(类)何止数万,我们直接堆放在工地上(JVM)上吗?相反,JVM有着一套精密的管理机制,来确保类的加载、验证、解析和初始化等任务能够有序且高效地完成。
kfaino
2023/10/02
2820
JVM | 从类加载到JVM内存结构
Linux吃掉我的内存
在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上换入换出页会极大地影响系统的性能。而当我
顶级程序员
2018/04/26
9970
Linux吃掉我的内存
数据库“炸了”,加CPU加内存?或许还有更好的解决方法!
之前在做业务应用系统压力测试项目的时候,发现大部分性能不达标的应用,问题都出在数据库上。数据库压力过大是每个业务经理都多多少少面临过的问题,那么解决的办法除了纵向提高数据库配置之外,是否还有其他更高效的途径呢?
嘉为蓝鲸
2021/09/01
1.5K0
我叫“毕加所”,不是毕加索。。。
我,腾讯家族的新成员。 跟兄弟姐妹一样,属鹅。 在与世界见面的第一天, 我想用歌声对你们说: 好险好险, 经过产品、PR、运营、技术的一夜battle, 终于,我叫—— 毕加所 来到这个世界上,我有自己的使命。 在歌声里, 你是否记得, 上次认识新同学是哪年? 你们之间有怎样的故事? 同窗时光总是短暂, 让毕业后的相聚更显珍贵。 因此,“毕加所”更要用切实行动告诉你, 毕业从此不散场。 为什么要办“毕加所”? 以AI加速器为始,腾讯按下产业孵化启动键。从AI、SaaS到WeCi
腾讯SaaS加速器
2020/06/09
5070
MONGODB 加索引 大内存 与连锁思维
创建MONGODB 的索引,属于基本操作,但如果是一个有2T 的 collection 要加一个索引,也属于基本操作,实际上量变产生质变,很多问题的考虑都不在那么简单。
AustinDatabases
2020/08/26
2.5K0
Spark在处理数据的时候,会将数据都加载到内存再做处理吗?
对于Spark的初学者,往往会有一个疑问:Spark(如SparkRDD、SparkSQL)在处理数据的时候,会将数据都加载到内存再做处理吗?
大数据学习与分享
2020/09/14
1.3K0
Spark在处理数据的时候,会将数据都加载到内存再做处理吗?
Linux吃掉了我的内存
在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上换入换出页会极大地影响系统的性能。而当我们使用free命令查看Linux系统内存使用情况时,会发现内存使用一直处于较高的水平,即使此时系统并没有运行多少软件。这正是Windows和Linux在内存管理上的区别,乍一看,Linux系统吃掉我们的内存(Linux ate my ram),但其实这也正是其内存管理的特点。
马哥linux运维
2018/11/28
7300
Postgresql concurrently index 为什么可以在线加索引
提到在线加索引都是商业数据库的功能,例如SQL SERVER 在线加索引就是你花钱买的版本也必须是企业版, 标准版都不能在线加索引。POSTGRESQL 支持在线加索引的功能,在本文撰写期间MYSQL 是不支持 online add index 对于几千万的大表建立索引还是要使用工具,并且8.0 使用gh ost 是有我问题,所以对于大表加索引并且是8.0的情况还得是 pt-osc.
AustinDatabases
2021/08/06
8780
Postgresql  concurrently index  为什么可以在线加索引
建议收藏chatGPT说的加Ubuntu虚拟内存的教程
这个是当下最流行最时髦的AI神器chatGPT和我一起合作写的一篇通用技术文章,请读者笑纳!
江涛学编程
2023/05/27
1.3K0
建议收藏chatGPT说的加Ubuntu虚拟内存的教程
建议收藏chatGPT说的加Ubuntu虚拟内存的教程
这个是当下最流行最时髦的AI神器chatGPT和我一起合作写的一篇通用技术文章,请读者笑纳!
江涛学编程
2023/03/17
1.6K0
Springboot中maven需要加的配置
给maven 的settings.xml配置文件的profiles标签添加 <profiles> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler
用户5927264
2019/08/01
1.3K0
GDS中如何加logo
好,言归正传,在GDS中打上自己的logo是一件很cool的事,而且有时候也是很必要的。
白山头
2020/06/29
1.1K0
为什么abstract @service注解的类不被加载到beanfactory中
使用过spring开发的开发者对@Service注解以及@Autowired注解不会陌生,系统在启动时会把@Service注解的类加载到BeanFactory中,然后就可以通过@Autowired注解的方式注入Service类实例,但并不是所以被@Service注解的类都会被加载到系统中,那么到底哪些类会被加载到系统中(也就是满足什么条件才会被加载呢),这个看下ClassPathScanningCandidateComponentProvider类的findCandidateComponents方法:
johnhuster的分享
2022/03/29
4690
Taro中如何将store加载到项目中
上面文章我们了解了如何创建store,最后导出时,在函数内部创建了store,所以导出时,函数需要调用,然后通过provicer组件将其注入到项目中。
挥刀北上
2022/05/11
7780
Taro中如何将store加载到项目中
利用Numpy中的ascontiguousarray可以是数组在内存上连续,加速计算
AttributeError: incompatible shape for a non-contiguous array
用户7886150
2021/01/02
2K0
将WordPress文章中的外链图片自动下载到本地
WordPress很多插件或者代码都可以实现在编辑文章中自动将外链图片下载到本地,最终我选择了一个叫:Easy Copy Paste的插件。
小狐狸说事
2023/11/17
5880
将WordPress文章中的外链图片自动下载到本地
React Hooks中这样写HTTP请求可以避免内存泄漏
译文来自 https://dev.to/somedood/best-practices-for-es2017-asynchronous-functions-async-await-39ji 原作者 Victor de la Fouchardière 译者: 蓝色的秋风(github/hua1995116) 大家好 !今天,让我们看一下在 React Hooks 中使用 fetch 和Abort Controller取消Web请求从而来避免内存泄露!当我们用 Fetch 来管理数据时,有时我们想取消请求(例如
秋风的笔记
2020/10/27
1.6K0
React Hooks中这样写HTTP请求可以避免内存泄漏
微信昵称可以加雪花了,个性又好看
这里先来看一下效果,我们可以看到昵称文字的上面有一个雪花的样式,感觉还是非常不错的!
@超人
2021/02/26
1.1K0
微信昵称可以加雪花了,个性又好看

相似问题

缓存页的最小缓存生存期与终止时间的差异

20

内部页缓存和动态页缓存之间的关系是什么?

10

禁用内部页缓存并启用动态页缓存

10

缓存页的过期时间为6小时

10

如何防止页的缓存?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文